const { verifyToken } = require('../utils/auth')
const TokenBlacklist = require('../models/TokenBlacklist') // 引入黑名单模型

module.exports = (roles = []) => {
  return async (req, res, next) => {
    console.log('Auth middleware called') // 调试日志
    try {
      const token = req.header('Authorization')?.replace('Bearer ', '')
      if (!token) {
        return res.status(401).json({ message: '请先登录' })
      }

      // 检查Token是否在黑名单中
      const isBlacklisted = await TokenBlacklist.findOne({ token })
      if (isBlacklisted) {
        return res.status(401).json({ message: 'Token已失效' })
      }

      const decoded = verifyToken(token)
      if (!decoded) {
        return res.status(401).json({ message: '无效的Token' })
      }

      // 检查角色权限
      if (roles.length && !roles.includes(decoded.role)) {
        return res.status(403).json({ message: '权限不足' })
      }

      req.user = decoded
      next()
    } catch (err) {
      res.status(401).json({ message: '认证失败' })
    }
  }
}
